library(tidyverse)
library(openintro)
library(readxl)
library(readr)
library(plotly)
library("rnaturalearth")
library("rnaturalearthdata")
WHOLifeExpectancy <- read_excel("WHOLifeExpectancy.xlsx")
WHO_metadata <- read_csv("WHO_metadata.csv", col_names = FALSE)
my_map_theme <- function(){
theme(panel.background=element_blank(),
axis.text=element_blank(),
axis.ticks=element_blank(),
axis.title=element_blank())
}
Question 1
WHOLifeExpectancy <- WHOLifeExpectancy %>%
rename(
"country" = "...1",
"HALEbirth_Both sexes_2016" = "Healthy life expectancy (HALE) at birth (years)",
"HALEbirth_Both sexes_2015" = "...3",
"HALEbirth_Both sexes_2010" = "...4",
"HALEbirth_Both sexes_2005" = "...5",
"HALEbirth_Both sexes_2000" = "...6",
"HALEbirth_Male_2016" = "...7",
"HALEbirth_Male_2015" = "...8",
"HALEbirth_Male_2010" = "...9",
"HALEbirth_Male_2005" = "...10",
"HALEbirth_Male_2000" = "...11",
"HALEbirth_Female_2016" = "...12",
"HALEbirth_Female_2015" = "...13",
"HALEbirth_Female_2010" = "...14",
"HALEbirth_Female_2005" = "...15",
"HALEbirth_Female_2000" = "...16",
"HALE60_Both sexes_2016" = "Healthy life expectancy (HALE) at age 60 (years)",
"HALE60_Both sexes_2015" = "...18",
"HALE60_Both sexes_2010" = "...19",
"HALE60_Both sexes_2005" = "...20",
"HALE60_Both sexes_2000" = "...21",
"HALE60_Male_2016" = "...22",
"HALE60_Male_2015" = "...23",
"HALE60_Male_2010" = "...24",
"HALE60_Male_2005" = "...25",
"HALE60_Male_2000" = "...26",
"HALE60_Female_2016" = "...27",
"HALE60_Female_2015" = "...28",
"HALE60_Female_2010" = "...29",
"HALE60_Female_2005" = "...30",
"HALE60_Female_2000" = "...31",
) %>%
filter(!is.na(country))
WHOLifeExpectancy
## # A tibble: 183 x 31
## country `HALEbirth_Both… `HALEbirth_Both… `HALEbirth_Both… `HALEbirth_Both…
## <chr> <chr> <chr> <chr> <chr>
## 1 Afghan… 53.0 53.2 51.6 49.6
## 2 Albania 68.1 67.8 66.4 65.4
## 3 Algeria 65.5 65.3 64.5 62.8
## 4 Angola 55.8 55.3 51.8 46.7
## 5 Antigu… 67.0 66.9 66.5 65.4
## 6 Argent… 68.4 68.2 67.3 66.7
## 7 Armenia 66.3 66.0 65.2 64.7
## 8 Austra… 73.0 72.7 72.2 71.4
## 9 Austria 72.4 72.1 71.4 70.6
## 10 Azerba… 64.9 64.6 63.4 61.5
## # … with 173 more rows, and 26 more variables: `HALEbirth_Both
## # sexes_2000` <chr>, HALEbirth_Male_2016 <chr>, HALEbirth_Male_2015 <chr>,
## # HALEbirth_Male_2010 <chr>, HALEbirth_Male_2005 <chr>,
## # HALEbirth_Male_2000 <chr>, HALEbirth_Female_2016 <chr>,
## # HALEbirth_Female_2015 <chr>, HALEbirth_Female_2010 <chr>,
## # HALEbirth_Female_2005 <chr>, HALEbirth_Female_2000 <chr>, `HALE60_Both
## # sexes_2016` <chr>, `HALE60_Both sexes_2015` <chr>, `HALE60_Both
## # sexes_2010` <chr>, `HALE60_Both sexes_2005` <chr>, `HALE60_Both
## # sexes_2000` <chr>, HALE60_Male_2016 <chr>, HALE60_Male_2015 <chr>,
## # HALE60_Male_2010 <chr>, HALE60_Male_2005 <chr>, HALE60_Male_2000 <chr>,
## # HALE60_Female_2016 <chr>, HALE60_Female_2015 <chr>,
## # HALE60_Female_2010 <chr>, HALE60_Female_2005 <chr>,
## # HALE60_Female_2000 <chr>
Question 2
WHOLifeExpectancy <- WHOLifeExpectancy %>%
pivot_longer("HALEbirth_Both sexes_2016":"HALE60_Female_2000", names_to="Column", values_to="value") %>%
separate(Column, into=c("HALE_type", "sex", "year"), sep="_") %>%
pivot_wider(names_from="HALE_type", values_from="value") %>%
arrange(desc(year))
WHOLifeExpectancy
## # A tibble: 2,745 x 5
## country sex year HALEbirth HALE60
## <chr> <chr> <chr> <chr> <chr>
## 1 Afghanistan Both sexes 2016 53.0 11.3
## 2 Afghanistan Male 2016 52.1 10.9
## 3 Afghanistan Female 2016 54.1 11.7
## 4 Albania Both sexes 2016 68.1 16.3
## 5 Albania Male 2016 66.7 15.3
## 6 Albania Female 2016 69.6 17.4
## 7 Algeria Both sexes 2016 65.5 15.8
## 8 Algeria Male 2016 65.4 15.7
## 9 Algeria Female 2016 65.6 15.8
## 10 Angola Both sexes 2016 55.8 13.6
## # … with 2,735 more rows
Question 3
WHO_metadata <- WHO_metadata%>%
rename(
"iso3" = "X2",
"country" = "X3",
)
world <- ne_countries(scale = "medium", returnclass = "sf")
WHOLifeExpectancy2016 <- WHOLifeExpectancy %>%
filter(year==2016, sex=="Both sexes")
WHOLifeExpectancy2016
## # A tibble: 183 x 5
## country sex year HALEbirth HALE60
## <chr> <chr> <chr> <chr> <chr>
## 1 Afghanistan Both sexes 2016 53.0 11.3
## 2 Albania Both sexes 2016 68.1 16.3
## 3 Algeria Both sexes 2016 65.5 15.8
## 4 Angola Both sexes 2016 55.8 13.6
## 5 Antigua and Barbuda Both sexes 2016 67.0 15.6
## 6 Argentina Both sexes 2016 68.4 17.3
## 7 Armenia Both sexes 2016 66.3 15.1
## 8 Australia Both sexes 2016 73.0 20.4
## 9 Austria Both sexes 2016 72.4 19.3
## 10 Azerbaijan Both sexes 2016 64.9 14.6
## # … with 173 more rows
WHOLifeExpectancy2016 <- left_join(WHOLifeExpectancy2016, WHO_metadata, by=c("country" = "country"))
sf_object <- left_join(world, WHOLifeExpectancy2016, by=c("adm0_a3" = "iso3"))
sf_object
## Simple feature collection with 241 features and 69 fields
## geometry type: MULTIPOLYGON
## dimension: XY
## bbox: xmin: -180 ymin: -89.99893 xmax: 180 ymax: 83.59961
## CRS: +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
## First 10 features:
## scalerank featurecla labelrank sovereignt sov_a3 adm0_dif
## 1 3 Admin-0 country 5 Netherlands NL1 1
## 2 1 Admin-0 country 3 Afghanistan AFG 0
## 3 1 Admin-0 country 3 Angola AGO 0
## 4 1 Admin-0 country 6 United Kingdom GB1 1
## 5 1 Admin-0 country 6 Albania ALB 0
## 6 3 Admin-0 country 6 Finland FI1 1
## 7 3 Admin-0 country 6 Andorra AND 0
## 8 1 Admin-0 country 4 United Arab Emirates ARE 0
## 9 1 Admin-0 country 2 Argentina ARG 0
## 10 1 Admin-0 country 6 Armenia ARM 0
## level type admin adm0_a3 geou_dif
## 1 2 Country Aruba ABW 0
## 2 2 Sovereign country Afghanistan AFG 0
## 3 2 Sovereign country Angola AGO 0
## 4 2 Dependency Anguilla AIA 0
## 5 2 Sovereign country Albania ALB 0
## 6 2 Country Aland ALD 0
## 7 2 Sovereign country Andorra AND 0
## 8 2 Sovereign country United Arab Emirates ARE 0
## 9 2 Sovereign country Argentina ARG 0
## 10 2 Sovereign country Armenia ARM 0
## geounit gu_a3 su_dif subunit su_a3 brk_diff
## 1 Aruba ABW 0 Aruba ABW 0
## 2 Afghanistan AFG 0 Afghanistan AFG 0
## 3 Angola AGO 0 Angola AGO 0
## 4 Anguilla AIA 0 Anguilla AIA 0
## 5 Albania ALB 0 Albania ALB 0
## 6 Aland ALD 0 Aland ALD 0
## 7 Andorra AND 0 Andorra AND 0
## 8 United Arab Emirates ARE 0 United Arab Emirates ARE 0
## 9 Argentina ARG 0 Argentina ARG 0
## 10 Armenia ARM 0 Armenia ARM 0
## name name_long brk_a3 brk_name
## 1 Aruba Aruba ABW Aruba
## 2 Afghanistan Afghanistan AFG Afghanistan
## 3 Angola Angola AGO Angola
## 4 Anguilla Anguilla AIA Anguilla
## 5 Albania Albania ALB Albania
## 6 Aland Aland Islands ALD Aland
## 7 Andorra Andorra AND Andorra
## 8 United Arab Emirates United Arab Emirates ARE United Arab Emirates
## 9 Argentina Argentina ARG Argentina
## 10 Armenia Armenia ARM Armenia
## brk_group abbrev postal formal_en formal_fr note_adm0
## 1 <NA> Aruba AW Aruba <NA> Neth.
## 2 <NA> Afg. AF Islamic State of Afghanistan <NA> <NA>
## 3 <NA> Ang. AO People's Republic of Angola <NA> <NA>
## 4 <NA> Ang. AI <NA> <NA> U.K.
## 5 <NA> Alb. AL Republic of Albania <NA> <NA>
## 6 <NA> Aland AI Ã…land Islands <NA> Fin.
## 7 <NA> And. AND Principality of Andorra <NA> <NA>
## 8 <NA> U.A.E. AE United Arab Emirates <NA> <NA>
## 9 <NA> Arg. AR Argentine Republic <NA> <NA>
## 10 <NA> Arm. ARM Republic of Armenia <NA> <NA>
## note_brk name_sort name_alt mapcolor7 mapcolor8 mapcolor9
## 1 <NA> Aruba <NA> 4 2 2
## 2 <NA> Afghanistan <NA> 5 6 8
## 3 <NA> Angola <NA> 3 2 6
## 4 <NA> Anguilla <NA> 6 6 6
## 5 <NA> Albania <NA> 1 4 1
## 6 <NA> Aland <NA> 4 1 4
## 7 <NA> Andorra <NA> 1 4 1
## 8 <NA> United Arab Emirates <NA> 2 1 3
## 9 <NA> Argentina <NA> 3 1 3
## 10 <NA> Armenia <NA> 3 1 2
## mapcolor13 pop_est gdp_md_est pop_year lastcensus gdp_year
## 1 9 103065 2258.0 NA 2010 NA
## 2 7 28400000 22270.0 NA 1979 NA
## 3 1 12799293 110300.0 NA 1970 NA
## 4 3 14436 108.9 NA NA NA
## 5 6 3639453 21810.0 NA 2001 NA
## 6 6 27153 1563.0 NA NA NA
## 7 8 83888 3660.0 NA 1989 NA
## 8 3 4798491 184300.0 NA 2010 NA
## 9 13 40913584 573900.0 NA 2010 NA
## 10 10 2967004 18770.0 NA 2001 NA
## economy income_grp wikipedia fips_10 iso_a2
## 1 6. Developing region 2. High income: nonOECD NA <NA> AW
## 2 7. Least developed region 5. Low income NA <NA> AF
## 3 7. Least developed region 3. Upper middle income NA <NA> AO
## 4 6. Developing region 3. Upper middle income NA <NA> AI
## 5 6. Developing region 4. Lower middle income NA <NA> AL
## 6 2. Developed region: nonG7 1. High income: OECD NA <NA> AX
## 7 2. Developed region: nonG7 2. High income: nonOECD NA <NA> AD
## 8 6. Developing region 2. High income: nonOECD NA <NA> AE
## 9 5. Emerging region: G20 3. Upper middle income NA <NA> AR
## 10 6. Developing region 4. Lower middle income NA <NA> AM
## iso_a3 iso_n3 un_a3 wb_a2 wb_a3 woe_id adm0_a3_is adm0_a3_us adm0_a3_un
## 1 ABW 533 533 AW ABW NA ABW ABW NA
## 2 AFG 004 004 AF AFG NA AFG AFG NA
## 3 AGO 024 024 AO AGO NA AGO AGO NA
## 4 AIA 660 660 <NA> <NA> NA AIA AIA NA
## 5 ALB 008 008 AL ALB NA ALB ALB NA
## 6 ALA 248 248 <NA> <NA> NA ALA ALD NA
## 7 AND 020 020 AD ADO NA AND AND NA
## 8 ARE 784 784 AE ARE NA ARE ARE NA
## 9 ARG 032 032 AR ARG NA ARG ARG NA
## 10 ARM 051 051 AM ARM NA ARM ARM NA
## adm0_a3_wb continent region_un subregion
## 1 NA North America Americas Caribbean
## 2 NA Asia Asia Southern Asia
## 3 NA Africa Africa Middle Africa
## 4 NA North America Americas Caribbean
## 5 NA Europe Europe Southern Europe
## 6 NA Europe Europe Northern Europe
## 7 NA Europe Europe Southern Europe
## 8 NA Asia Asia Western Asia
## 9 NA South America Americas South America
## 10 NA Asia Asia Western Asia
## region_wb name_len long_len abbrev_len tiny homepart
## 1 Latin America & Caribbean 5 5 5 4 NA
## 2 South Asia 11 11 4 NA 1
## 3 Sub-Saharan Africa 6 6 4 NA 1
## 4 Latin America & Caribbean 8 8 4 NA NA
## 5 Europe & Central Asia 7 7 4 NA 1
## 6 Europe & Central Asia 5 13 5 5 NA
## 7 Europe & Central Asia 7 7 4 5 1
## 8 Middle East & North Africa 20 20 6 NA 1
## 9 Latin America & Caribbean 9 9 4 NA 1
## 10 Europe & Central Asia 7 7 4 NA 1
## country sex year HALEbirth HALE60 X1
## 1 <NA> <NA> <NA> <NA> <NA> <NA>
## 2 Afghanistan Both sexes 2016 53.0 11.3 COUNTRY
## 3 Angola Both sexes 2016 55.8 13.6 COUNTRY
## 4 <NA> <NA> <NA> <NA> <NA> <NA>
## 5 Albania Both sexes 2016 68.1 16.3 COUNTRY
## 6 <NA> <NA> <NA> <NA> <NA> <NA>
## 7 <NA> <NA> <NA> <NA> <NA> <NA>
## 8 United Arab Emirates Both sexes 2016 66.7 14.9 COUNTRY
## 9 Argentina Both sexes 2016 68.4 17.3 COUNTRY
## 10 Armenia Both sexes 2016 66.3 15.1 COUNTRY
## geometry
## 1 MULTIPOLYGON (((-69.89912 1...
## 2 MULTIPOLYGON (((74.89131 37...
## 3 MULTIPOLYGON (((14.19082 -5...
## 4 MULTIPOLYGON (((-63.00122 1...
## 5 MULTIPOLYGON (((20.06396 42...
## 6 MULTIPOLYGON (((20.61133 60...
## 7 MULTIPOLYGON (((1.706055 42...
## 8 MULTIPOLYGON (((53.92783 24...
## 9 MULTIPOLYGON (((-64.54917 -...
## 10 MULTIPOLYGON (((45.55234 40...
Question 4
ggplot(sf_object) +
geom_sf(aes(fill=as.numeric(HALEbirth))) +
scale_fill_continuous(low="red", high="blue", breaks=c(45, 55, 65, 75)) +
labs(fill = "Healthy Life Expectancy at Birth (years)") +
my_map_theme()

Question 5
sf_object <- sf_object %>%
mutate(text = paste("Healthy Life Expectancy at Birth: ", HALEbirth, " years"))
p <- ggplot(sf_object) +
geom_sf(aes(fill=as.numeric(HALEbirth), text=text)) +
scale_fill_continuous(low="red", high="blue", breaks=c(45, 55, 65, 75)) +
labs(fill = "Healthy Life Expectancy at Birth (years)") +
my_map_theme()
## Warning: Ignoring unknown aesthetics: text
ggplotly(p, tooltip="text")
LS0tCnRpdGxlOiAiUXVpeiAzIgphdXRob3I6ICJDaHJpcyBNb3JvbmV5IgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0Ci0tLQoKYGBge3IgbG9hZC1wYWNrYWdlcywgbWVzc2FnZT1GQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkob3BlbmludHJvKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShyZWFkcikKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoInJuYXR1cmFsZWFydGgiKQpsaWJyYXJ5KCJybmF0dXJhbGVhcnRoZGF0YSIpCldIT0xpZmVFeHBlY3RhbmN5IDwtIHJlYWRfZXhjZWwoIldIT0xpZmVFeHBlY3RhbmN5Lnhsc3giKQpXSE9fbWV0YWRhdGEgPC0gcmVhZF9jc3YoIldIT19tZXRhZGF0YS5jc3YiLCBjb2xfbmFtZXMgPSBGQUxTRSkgCm15X21hcF90aGVtZSA8LSBmdW5jdGlvbigpewogIHRoZW1lKHBhbmVsLmJhY2tncm91bmQ9ZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGV4dD1lbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aWNrcz1lbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZT1lbGVtZW50X2JsYW5rKCkpCn0KYGBgCgojIyMgUXVlc3Rpb24gMQoKYGBge3IgY29kZS1jaHVuay1sYWJlbH0KV0hPTGlmZUV4cGVjdGFuY3kgPC0gV0hPTGlmZUV4cGVjdGFuY3kgJT4lCiAgcmVuYW1lKAogICAgImNvdW50cnkiID0gIi4uLjEiLAogICAgIkhBTEViaXJ0aF9Cb3RoIHNleGVzXzIwMTYiID0gIkhlYWx0aHkgbGlmZSBleHBlY3RhbmN5IChIQUxFKSBhdCBiaXJ0aCAoeWVhcnMpIiwKICAgICJIQUxFYmlydGhfQm90aCBzZXhlc18yMDE1IiA9ICIuLi4zIiwKICAgICJIQUxFYmlydGhfQm90aCBzZXhlc18yMDEwIiA9ICIuLi40IiwKICAgICJIQUxFYmlydGhfQm90aCBzZXhlc18yMDA1IiA9ICIuLi41IiwKICAgICJIQUxFYmlydGhfQm90aCBzZXhlc18yMDAwIiA9ICIuLi42IiwKICAgICJIQUxFYmlydGhfTWFsZV8yMDE2IiA9ICIuLi43IiwKICAgICJIQUxFYmlydGhfTWFsZV8yMDE1IiA9ICIuLi44IiwKICAgICJIQUxFYmlydGhfTWFsZV8yMDEwIiA9ICIuLi45IiwKICAgICJIQUxFYmlydGhfTWFsZV8yMDA1IiA9ICIuLi4xMCIsCiAgICAiSEFMRWJpcnRoX01hbGVfMjAwMCIgPSAiLi4uMTEiLAogICAgIkhBTEViaXJ0aF9GZW1hbGVfMjAxNiIgPSAiLi4uMTIiLAogICAgIkhBTEViaXJ0aF9GZW1hbGVfMjAxNSIgPSAiLi4uMTMiLAogICAgIkhBTEViaXJ0aF9GZW1hbGVfMjAxMCIgPSAiLi4uMTQiLAogICAgIkhBTEViaXJ0aF9GZW1hbGVfMjAwNSIgPSAiLi4uMTUiLAogICAgIkhBTEViaXJ0aF9GZW1hbGVfMjAwMCIgPSAiLi4uMTYiLAogICAgIkhBTEU2MF9Cb3RoIHNleGVzXzIwMTYiID0gIkhlYWx0aHkgbGlmZSBleHBlY3RhbmN5IChIQUxFKSBhdCBhZ2UgNjAgKHllYXJzKSIsCiAgICAiSEFMRTYwX0JvdGggc2V4ZXNfMjAxNSIgPSAiLi4uMTgiLAogICAgIkhBTEU2MF9Cb3RoIHNleGVzXzIwMTAiID0gIi4uLjE5IiwKICAgICJIQUxFNjBfQm90aCBzZXhlc18yMDA1IiA9ICIuLi4yMCIsCiAgICAiSEFMRTYwX0JvdGggc2V4ZXNfMjAwMCIgPSAiLi4uMjEiLAogICAgIkhBTEU2MF9NYWxlXzIwMTYiID0gIi4uLjIyIiwKICAgICJIQUxFNjBfTWFsZV8yMDE1IiA9ICIuLi4yMyIsCiAgICAiSEFMRTYwX01hbGVfMjAxMCIgPSAiLi4uMjQiLAogICAgIkhBTEU2MF9NYWxlXzIwMDUiID0gIi4uLjI1IiwKICAgICJIQUxFNjBfTWFsZV8yMDAwIiA9ICIuLi4yNiIsCiAgICAiSEFMRTYwX0ZlbWFsZV8yMDE2IiA9ICIuLi4yNyIsCiAgICAiSEFMRTYwX0ZlbWFsZV8yMDE1IiA9ICIuLi4yOCIsCiAgICAiSEFMRTYwX0ZlbWFsZV8yMDEwIiA9ICIuLi4yOSIsCiAgICAiSEFMRTYwX0ZlbWFsZV8yMDA1IiA9ICIuLi4zMCIsCiAgICAiSEFMRTYwX0ZlbWFsZV8yMDAwIiA9ICIuLi4zMSIsCiAgKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGNvdW50cnkpKQpXSE9MaWZlRXhwZWN0YW5jeQpgYGAKCiMjIyBRdWVzdGlvbiAyCgpgYGB7cn0KV0hPTGlmZUV4cGVjdGFuY3kgPC0gV0hPTGlmZUV4cGVjdGFuY3kgJT4lCiAgcGl2b3RfbG9uZ2VyKCJIQUxFYmlydGhfQm90aCBzZXhlc18yMDE2IjoiSEFMRTYwX0ZlbWFsZV8yMDAwIiwgbmFtZXNfdG89IkNvbHVtbiIsIHZhbHVlc190bz0idmFsdWUiKSAlPiUKICBzZXBhcmF0ZShDb2x1bW4sIGludG89YygiSEFMRV90eXBlIiwgInNleCIsICJ5ZWFyIiksIHNlcD0iXyIpICU+JQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb209IkhBTEVfdHlwZSIsIHZhbHVlc19mcm9tPSJ2YWx1ZSIpICU+JQogIGFycmFuZ2UoZGVzYyh5ZWFyKSkKV0hPTGlmZUV4cGVjdGFuY3kKYGBgCgojIyMgUXVlc3Rpb24gMwoKYGBge3J9CldIT19tZXRhZGF0YSA8LSBXSE9fbWV0YWRhdGElPiUKICByZW5hbWUoCiAgICAiaXNvMyIgPSAiWDIiLAogICAgImNvdW50cnkiID0gIlgzIiwKICApCgp3b3JsZCA8LSBuZV9jb3VudHJpZXMoc2NhbGUgPSAibWVkaXVtIiwgcmV0dXJuY2xhc3MgPSAic2YiKQoKV0hPTGlmZUV4cGVjdGFuY3kyMDE2IDwtIFdIT0xpZmVFeHBlY3RhbmN5ICU+JQogIGZpbHRlcih5ZWFyPT0yMDE2LCBzZXg9PSJCb3RoIHNleGVzIikKV0hPTGlmZUV4cGVjdGFuY3kyMDE2CgpXSE9MaWZlRXhwZWN0YW5jeTIwMTYgPC0gbGVmdF9qb2luKFdIT0xpZmVFeHBlY3RhbmN5MjAxNiwgV0hPX21ldGFkYXRhLCBieT1jKCJjb3VudHJ5IiA9ICJjb3VudHJ5IikpCgpzZl9vYmplY3QgPC0gbGVmdF9qb2luKHdvcmxkLCBXSE9MaWZlRXhwZWN0YW5jeTIwMTYsIGJ5PWMoImFkbTBfYTMiID0gImlzbzMiKSkKc2Zfb2JqZWN0CmBgYAoKIyMjIFF1ZXN0aW9uIDQKCmBgYHtyfQpnZ3Bsb3Qoc2Zfb2JqZWN0KSArCiAgZ2VvbV9zZihhZXMoZmlsbD1hcy5udW1lcmljKEhBTEViaXJ0aCkpKSArCiAgc2NhbGVfZmlsbF9jb250aW51b3VzKGxvdz0icmVkIiwgaGlnaD0iYmx1ZSIsIGJyZWFrcz1jKDQ1LCA1NSwgNjUsIDc1KSkgKyAKICBsYWJzKGZpbGwgPSAiSGVhbHRoeSBMaWZlIEV4cGVjdGFuY3kgYXQgQmlydGggKHllYXJzKSIpICsKICBteV9tYXBfdGhlbWUoKQpgYGAKCiMjIyBRdWVzdGlvbiA1CgpgYGB7cn0Kc2Zfb2JqZWN0IDwtIHNmX29iamVjdCAlPiUKICBtdXRhdGUodGV4dCA9IHBhc3RlKCJIZWFsdGh5IExpZmUgRXhwZWN0YW5jeSBhdCBCaXJ0aDogIiwgSEFMRWJpcnRoLCAiIHllYXJzIikpCnAgPC0gZ2dwbG90KHNmX29iamVjdCkgKwogIGdlb21fc2YoYWVzKGZpbGw9YXMubnVtZXJpYyhIQUxFYmlydGgpLCB0ZXh0PXRleHQpKSArCiAgc2NhbGVfZmlsbF9jb250aW51b3VzKGxvdz0icmVkIiwgaGlnaD0iYmx1ZSIsIGJyZWFrcz1jKDQ1LCA1NSwgNjUsIDc1KSkgKyAKICBsYWJzKGZpbGwgPSAiSGVhbHRoeSBMaWZlIEV4cGVjdGFuY3kgYXQgQmlydGggKHllYXJzKSIpICsKICBteV9tYXBfdGhlbWUoKQoKZ2dwbG90bHkocCwgdG9vbHRpcD0idGV4dCIpCmBgYAoK